package cn.cttic.order.service;

import cn.cttic.base.api.domain.vo.BaseRecordVo;
import cn.cttic.order.api.domain.BaseReconciliation;
import cn.cttic.order.api.domain.bo.BaseReconciliationQueryBo;
import cn.cttic.order.api.domain.vo.BaseReconciliationVo;
import cn.cttic.order.api.domain.bo.BaseReconciliationBo;
import cn.cttic.common.mybatis.core.page.TableDataInfo;
import cn.cttic.common.mybatis.core.page.PageQuery;
import jakarta.servlet.http.HttpServletResponse;

import java.net.http.HttpResponse;
import java.util.Collection;
import java.util.List;

/**
 * 对账管理Service接口
 *
 * @author Times.Studio
 * @date 2025-01-02
 */
public interface IBaseReconciliationService {

    /**
     * 导出对账单Excel
     * @param id 对账单标识
     * @param response
     */
    void exportReconciliationPdf(String id, HttpServletResponse response);

    /**
     * 导出对账单PDF
     * @param id 对账单标识
     * @param response
     */
    void exportReconciliationExcel(String id, HttpServletResponse response);

    /**
     * 查询对账管理
     *
     * @param id 主键
     * @return 对账管理
     */
    BaseReconciliationVo queryById(String id);

    /**
     * 确认操作
     *
     * @param id 主键
     * @return 对账管理
     */
    BaseReconciliationVo confirm(String id);

    /**
     * 确认操作
     *
     * @param id 主键
     * @return 对账管理
     */
    List<BaseReconciliationVo> batchConfirm(List<String> ids);

    /**
     * 确认操作
     *
     * @param id 主键
     * @return 对账管理
     */
    BaseReconciliationVo audit(String id, Integer reconciliationStatus, String reconciliationReason, String writeOffApprovalNo, String writeOffProof);

    /**
     * 确认操作
     *
     * @param id 主键
     * @return 对账管理
     */
    BaseReconciliationVo ticket(String id, String receiptInfo);

    /**
     * 确认操作
     *
     * @param id 主键
     * @return 对账管理
     */
    BaseReconciliationVo accomplish(String id, String paidProof);

    /**
     * 查询对账单记录
     * @param bo
     * @return
     */
    List<BaseRecordVo> queryRecordList(BaseReconciliationQueryBo bo);

    /**
     * 分页查询对账管理列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 对账管理分页列表
     */
    TableDataInfo<BaseReconciliationVo> queryReconciliationPageList(BaseReconciliationQueryBo bo);

    /**
     * 分页查询对账管理列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 对账管理分页列表
     */
    TableDataInfo<BaseReconciliationVo> queryWriteOffPageList(BaseReconciliationQueryBo bo);

    /**
     * 分页查询对账管理列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 对账管理分页列表
     */
    TableDataInfo<BaseReconciliationVo> queryPageList(BaseReconciliationBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的对账管理列表
     *
     * @param bo 查询条件
     * @return 对账管理列表
     */
    List<BaseReconciliationVo> queryList(BaseReconciliationBo bo);

    /**
     * 新增对账管理
     *
     * @param bo 对账管理
     * @return 是否新增成功
     */
    Boolean insertByBo(BaseReconciliationBo bo);

    /**
     * 修改对账管理
     *
     * @param bo 对账管理
     * @return 是否修改成功
     */
    Boolean updateByBo(BaseReconciliationBo bo);

    /**
     * 校验并批量删除对账管理信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
}
